#include "TemperatureSensor_SCUT.h"

USensorData CTemperatureSensor_SCUT::PreData;

CTemperatureSensor_SCUT::CTemperatureSensor_SCUT()
{
}

CTemperatureSensor_SCUT::~CTemperatureSensor_SCUT()
{

}

//函数名：
//函数功能：
//函数参数：
//返回值：
void CTemperatureSensor_SCUT::GetCmd(string &Command)
{
    Command = "010600010101185A";
}

//函数名：
//函数功能：
//函数参数：
//返回值：
void CTemperatureSensor_SCUT::GetData(const string & ReturnData, USensorData & SensorData)
{
    int DataLen;
    DataLen = ReturnData.length()/2;
    if(DataLen == 22)
    {
        int Hum, Temp;
        string Hums(ReturnData.begin() + 12, ReturnData.begin() + 16);
        sscanf(Hums.c_str(), "%x", &Hum);
        SensorData.Values.FirstValue = Hum * 0.1;

        string Temps(ReturnData.begin() + 34, ReturnData.begin() + 38);
        sscanf(Temps.c_str(), "%x", &Temp);
        SensorData.Values.SecondValue = Temp * 0.1;
        //cout << "PreData:" << PreData.Values.FirstValue << " " << PreData.Values.SecondValue << endl;
        if((PreData.Values.FirstValue != 0) && (PreData.Values.SecondValue != 0)
        && (abs(SensorData.Values.SecondValue/2 - PreData.Values.SecondValue) < abs(SensorData.Values.SecondValue - PreData.Values.SecondValue)))
        {
            SensorData.Values.SecondValue = SensorData.Values.SecondValue / 2;
            SensorData.Values.FirstValue = PreData.Values.FirstValue;
        }
        PreData = SensorData;
    }
    else if(DataLen == 11)
    {
        int Hum;
        double value;
        string Hums(ReturnData.begin() + 12, ReturnData.begin() + 16);
        sscanf(Hums.c_str(), "%x", &Hum);
        value = Hum * 0.1;

        if((PreData.Values.FirstValue != 0) || (PreData.Values.SecondValue != 0))
        {
            if(abs(value - PreData.Values.FirstValue) <= abs(value - PreData.Values.SecondValue))
            {
                SensorData.Values.FirstValue = value;
                if(PreData.Values.SecondValue != 0)
                    SensorData.Values.SecondValue = PreData.Values.SecondValue;
                else
                    SensorData.Values.SecondValue = 25;
                PreData = SensorData;
            }
            else
            {
                SensorData.Values.SecondValue = value;
                if(PreData.Values.FirstValue != 0)
                    SensorData.Values.FirstValue = PreData.Values.FirstValue;
                else
                    SensorData.Values.FirstValue = 50;
                PreData = SensorData;
            }
        }
//        else
//        {
//            SensorData.Values.FirstValue = 50; SensorData.Values.SecondValue = 25;
//            PreData = SensorData;
//        }
    }
    else
    {
        SensorData.Values.FirstValue = 50; SensorData.Values.SecondValue = 25;
        PreData = SensorData;
    }

}
